package com.xuecheng.content.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.content.model.dto.CourseBaseDTO;
import com.xuecheng.api.content.model.qo.QueryCourseBaseModel;
import com.xuecheng.common.domain.page.PageRequestParams;
import com.xuecheng.common.domain.page.PageVO;
import com.xuecheng.common.enums.common.CommonEnum;
import com.xuecheng.common.util.StringUtil;
import com.xuecheng.content.convert.CourseBaseConvert;
import com.xuecheng.content.entity.CourseBase;
import com.xuecheng.content.mapper.CourseBaseMapper;
import com.xuecheng.content.service.CourseBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.util.Collections;
import java.util.List;

/**
 * <p>
 * 课程基本信息 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseBaseServiceImpl extends ServiceImpl<CourseBaseMapper, CourseBase> implements CourseBaseService {

    /*
    * 步骤分析：
    *  1.是否需要开启事务
    *  2.判断关键数据
    *       分页数据
    *       查询条件
    *  3.构建mp分页对象
    *  4.构建查询条件对象LambdaQueryWrapper
    *  5.查询数据
    *  6.获得数据并封装返回结果
    *       封装PageVo数据
    * */
    public PageVO queryCourseBaseList(PageRequestParams params, QueryCourseBaseModel model,Long companyId) {

        //1.是否需要开启事务
        // 查询无需开启事务
        // 2.判断关键数据
        //      分页数据
        //      查询条件

        // 2.1 判断分页数据
        Long pageNo = params.getPageNo();
        Integer pageSize = params.getPageSize();

        if (ObjectUtils.isEmpty(pageNo) || pageNo < 0) {
            params.setPageNo(PageRequestParams.DEFAULT_PAGE_NUM);
        }

        if (ObjectUtils.isEmpty(pageSize) || pageSize < 0) {
            params.setPageSize(PageRequestParams.DEFAULT_PAGE_SIZE);
        }

        // 2.2.构建查询条件对象LambdaQueryWrapper
        // 完成第四部中的构建查询条件
        LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();

        // 完整版
        // select * from course_base where name = ? and auditStatus = ? and companyId = ?
        // if (StringUtil.isNotBlank(model.getCourseName())) {
        //     queryWrapper.eq(CourseBase::getName,model.getCourseName());
        // }
        //
        // if (StringUtil.isNotBlank(model.getAuditStatus())) {
        //     queryWrapper.eq(CourseBase::getAuditStatus,model.getAuditStatus());
        // }

        // 简版
        queryWrapper.like(StringUtil.isNotBlank(model.getCourseName()),CourseBase::getName,model.getCourseName());
        queryWrapper.eq(StringUtil.isNotBlank(model.getAuditStatus()),CourseBase::getAuditStatus,model.getAuditStatus());
        queryWrapper.eq(companyId!=null,CourseBase::getCompanyId,companyId);
        queryWrapper.eq(CourseBase::getStatus, CommonEnum.USING_FLAG.getCode());


        // 3.构建mp分页对象
        Page<CourseBase> page = new Page<>(params.getPageNo(),params.getPageSize());


        // 5.查询数据
        Page<CourseBase> pageResult = this.page(page, queryWrapper);

        // 获得当前页的集合数据
        List<CourseBase> records = pageResult.getRecords();

        // 查询数据的总记录数
        long total = pageResult.getTotal();


        // 将po数据转为dto数据
        List<CourseBaseDTO> dtos = Collections.EMPTY_LIST;


        if (!(CollectionUtils.isEmpty(records))) {
            dtos = CourseBaseConvert.INSTANCE.entitys2dtos(records);
        }

        // 6.获得数据并封装返回结果
        //      封装PageVo数据
        PageVO pageVO = new PageVO(dtos, total, params.getPageNo(), params.getPageSize());


        return pageVO;
    }

}